<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>高阶函数_函数柯里化</title>
  </head>

  <body>
    <div id="test"></div>

    <script type="text/javascript" src="../js/react.development.js"></script>
    <script
      type="text/javascript"
      src="../js/react-dom.development.js"
    ></script>
    <script type="text/javascript" src="../js/babel.min.js"></script>

    <script type="text/babel">
    
      /* 
      高阶函数：如果一个函数符合下面2个规范中的任何一个，那该函数就是高阶函数。
              1.若A函数，接收的参数是一个函数，那么A就可以称之为高阶函数。
              2.若A函数，调用的返回值依然是一个函数，那么A就可以称之为高阶函数。
              常见的高阶函数有：Promise、setTimeout、arr.map()等等

      函数的柯里化：通过函数调用继续返回函数的方式，实现多次接收参数最后统一处理的函数编码形式。 
        function sum(a){
          return(b)=>{
            return (c)=>{
              return a+b+c
            }
          }
        }
      */

      class Login extends React.Component {

        state = {
          username:'',
          password:''
        }

        render() {
          return (
            <form action="http://www.atguigu.com" onSubmit={this.handleSubmit}>
              用户名:<input onChange={this.saveFormDte('username')} type="text" name="username"/>&nbsp;
              密码:<input onChange={this.saveFormDte('password')} type="password" name="password"/>&nbsp;
              <button>点击提示</button>&nbsp;
            </form>
          );
        }

        handleSubmit = event =>{
          event.preventDefault();
          alert(`你输入的用户名是:${this.state.username},你输入的密码是:${this.state.password}`)
        }

        saveFormDte = dateType =>{
          return event =>{
            this.setState({[dateType]:event.target.value})
          }
        }

      }

      ReactDOM.render(<Login />, document.getElementById("test"));
    </script>
  </body>
</html>
